/**
 * @author dmarcos / https://github.com/dmarcos
 * @author mrdoob / http://mrdoob.com
 */

THREE.VRControls = function ( object, callback ) {

    var scope = this;

    var vrInput;

    var onVRDevices = function ( devices ) {

        for ( var i = 0; i < devices.length; i ++ ) {

            var device = devices[ i ];

            if ( device instanceof PositionSensorVRDevice ) {

                vrInput = devices[ i ];
                return; // We keep the first we encounter

            }

        }

        if ( callback !== undefined ) {

            callback( 'HMD not available' );

        }

    };

    if ( navigator.getVRDevices !== undefined ) {

        navigator.getVRDevices().then( onVRDevices );

    } else if ( callback !== undefined ) {

        callback( 'Your browser is not VR Ready' );

    }

    // the Rift SDK returns the position in meters
    // this scale factor allows the user to define how meters
    // are converted to scene units.
    this.scale = 1;

    this.update = function () {

        if ( vrInput === undefined ) return;

        var state = vrInput.getState();

        if ( state.orientation !== null ) {

            object.quaternion.copy( state.orientation );

        }

        if ( state.position !== null ) {

            object.position.copy( state.position ).multiplyScalar( scope.scale );

        }

    };

    this.zeroSensor = function () {

        if ( vrInput === undefined ) return;

        vrInput.zeroSensor();

    };

};